﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using SosBL;
using SosData;
using SosForms;

namespace UOCmaker
{
    public partial class FormPlantillaContenidoEditor : FormDetalle
    {

        #region " Constructor "

        /// <summary>
        /// Constructor
        /// </summary>
        public FormPlantillaContenidoEditor()
        {
            InitializeComponent();
        }

        //Variables 
        public PlantillaContenido _plantillaContenido;
        sosContext db = null;

        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="plantillaContenido">plantillaContenido</param>
        public FormPlantillaContenidoEditor(PlantillaContenido plantillaContenido)
        {
            InitializeComponent();
            _plantillaContenido = plantillaContenido;
            db = new sosContext();
        }

        Plantilla _plantilla;
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="plantillaContenido">plantillaContenido</param>
        public FormPlantillaContenidoEditor(PlantillaContenido plantillaContenido, Plantilla plantilla)
        {
            InitializeComponent();
            _plantilla = plantilla;
            _plantillaContenido = plantillaContenido;
            db = new sosContext();
        }

        /// <summary>
        /// Form load
        /// </summary>
        /// <param name="sender">sender</param>
        /// <param name="e">e</param>
        private void FormPlantillaContenidoEditor_Load(object sender, EventArgs e)
        {
            _plantillaContenido = (from pc in db.PlantillaContenidos.Where(pc => pc.Id == _plantillaContenido.Id) select pc).FirstOrDefault();
            if (_plantillaContenido == null)
            {
                _plantillaContenido = new PlantillaContenido();
                db.PlantillaContenidos.Add(_plantillaContenido);
            }
            bindingSource.DataSource = _plantillaContenido;

            tipologiaBindingSource.DataSource = db.tipologias.ToList();
        }

        #endregion

        #region " Metodos PlantillaContenido "

        /// <summary>
        /// Guardar cambios
        /// </summary>
        public override void Guardar()
        {
            bindingSource.EndEdit();
            _plantillaContenido = (PlantillaContenido)bindingSource.Current;
            if (ModoForm == _modoForm.Editar)
            {
                db.SaveChanges();
            }

            cancelado = false;
            this.Close();
        }

        /// <summary>
        /// Cancelar cambios
        /// </summary>
        public override void Cancelar()
        {
            cancelado = true;
            this.Close();
        }

        /// <summary>
        /// Añadir tipologia en el caso que no exista
        /// </summary>
        private void AñadirTipologia()
        {
            var tipologias = from t in db.tipologias.Where(t => t.NombreTipologia == this.cmbTipologia.Text) select t;
            if (!tipologias.Any() && this.cmbTipologia.Text != "")
            {
                if (MessageBox.Show("Esta tipología no existe, ¿Desea crearla?", "Añadir tipología", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
                {
                    Tipologia tipologia = new Tipologia();
                    tipologia.NombreTipologia = this.cmbTipologia.Text;
                    db.tipologias.Add(tipologia);
                    db.SaveChanges();
                }
            }
        }

        #endregion

        #region "  Eventos "

        /// <summary>
        /// añadir tipologia en el caso que no exista
        /// </summary>
        /// <param name="sender">sender</param>
        /// <param name="e">e</param>
        private void cmbTipologia_Leave(object sender, EventArgs e)
        {
            AñadirTipologia();
        }

        #endregion

    }
}
